⚙️ 7. Asynchronous JavaScript

🔹 1. Callbacks

Function jo kisi kaam ke complete hone ke baad chalti hai. Ye async programming ka basic concept hai.

function fetchData(callback) {
  setTimeout(() => {
    callback("Data received");
  }, 2000);
}

fetchData((result) => {
  console.log(result);
});

🔹 2. Callback Hell

Jab multiple callbacks nested hoti hain, to code mushkil ho jata hai samajhna. Isko 'callback hell' kehte hain.

setTimeout(() => {
  console.log("1st step");
  setTimeout(() => {
    console.log("2nd step");
    setTimeout(() => {
      console.log("3rd step");
    }, 1000);
  }, 1000);
}, 1000);

🔹 3. Promises

Promises better way hain async code likhne ke liye. Ye 3 states mein hoti hain: pending, resolved, rejected.

const fetchData = new Promise((resolve, reject) => {
  let success = true;
  if(success){
    resolve("Data loaded");
  } else {
    reject("Error occurred");
  }
});

fetchData.then(res => console.log(res)).catch(err => console.error(err));

🔹 4. Promise APIs

`Promise.all`, `Promise.race`, `Promise.allSettled` etc. multiple promises handle karne ke liye use hoti hain.

const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
Promise.all([p1, p2]).then(values => {
  console.log(values); // [1, 2]
});

🔹 5. Promise Chain

Ek promise complete hone ke baad dusra promise chain karke call karna.

fetchData()
  .then(res => {
    console.log("Step 1 done");
    return doNext();
  })
  .then(() => {
    console.log("Step 2 done");
  })
  .catch(err => console.error(err));